<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="https://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:blogger='http://schemas.google.com/blogger/2008'><id>tag:blogger.com,1999:blog-4476863800158400170</id><updated>2022-09-15T11:14:11.967+02:00</updated><category term='debug debugger troubleshoot explore script technique javascript ecmascript'/><category term='ism service management taddm asset'/><category term='elevator pitch blurb sales explanation'/><category term='script domino multivalued attribute'/><category term='system store cloudscape derby backup'/><category term='clustering'/><category term='custom connector component library api notes domino extend tdi'/><category term='forum java string handling javascript jscript InterpretException'/><category term='java script exception try catch variable undefined'/><category term='java class name script'/><category term='scalability'/><category term='HA scale scaling scalability performance availability reliability'/><category term='ism service management taddm asset service desk tsrm ticket helpdesk'/><category term='connector interface api direct data access'/><category term='scale'/><category term='performance'/><category term='HA'/><category term='db2 sql jdbc error code log troubleshoot debug'/><category term='sync synchronize password technique single login'/><category term='connector loop feed flow parse attribute hook on no match on multiple found'/><category term='scale scaling performance availability reliatbility'/><category term='availability'/><category term='solution directory customize setting preference'/><category term='lotus connections profiles syncdbfromsource'/><category term='scaling'/><title type='text'>TDIing out loud, ok SDIing as well</title><subtitle type='html'>Ramblings on the paradigm-shift that is TDI.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default'/><link rel='alternate' type='text/html' href='http://www.tdiingoutloud.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default?start-index=26&amp;max-results=25'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><generator version='7.00' uri='https://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8694371722907798590</id><published>2021-10-04T20:21:00.006+02:00</published><updated>2021-10-15T20:11:17.165+02:00</updated><title type='text'>As Eisenhower said, Plans are Useless</title><summary type='text'>...as soon as the first shot is fired. However, the art of planning is invaluable. In other words, plan for change and be ready to change your plans. Repeatedly. This be the foundation of an agile approach to solution development.I agree with Ken Schwaber in that many agile methodologies do not feel very agile. Some major contenders are thinly veiled command-and-control frameworks in which you </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8694371722907798590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8694371722907798590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8694371722907798590'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8694371722907798590'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2021/10/i-agree-with-ken-schwaber-in-that-many.html' title='As Eisenhower said, Plans are Useless'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-7162261451079550788</id><published>2020-12-13T11:43:00.000+01:00</published><updated>2020-12-13T11:43:03.611+01:00</updated><title type='text'>Agile is as Agile does...</title><summary type='text'>...to paraphrase Forest Gump. TDI (aka SDI) is an extraordinarily agile platform for exploration, prototyping and crafting enterprise-strength solutions for data movement and services. However, using it or any other tool does not an agile developer make. Agile development is all about mindset and culture rather than processes and tools. In this age of industrialized and weaponized Agile (the noun</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/7162261451079550788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=7162261451079550788' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7162261451079550788'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7162261451079550788'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2020/03/agile-is-as-agile-does.html' title='Agile is as Agile does...'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8975826159575693281</id><published>2020-12-01T14:04:00.000+01:00</published><updated>2020-12-01T14:04:49.536+01:00</updated><title type='text'>How to turn security events from QRadar into self-healing actions on infrastructure</title><summary type='text'>Here for your perusal is a self-contained solution that provides a service AL that listens for incoming requests coming from QRadar Event Rules. You write your own ALs to perform actions based on various events, using data shared by QRadar in the event action request JSON. Note that this is part of the Guardium bundle, leveraging it to automatically perform reconfiguration, like locking </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8975826159575693281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8975826159575693281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8975826159575693281'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8975826159575693281'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2020/12/how-to-turn-security-events-from-qradar.html' title='How to turn security events from QRadar into self-healing actions on infrastructure'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-6782558182424094229</id><published>2020-01-23T09:21:00.002+01:00</published><updated>2020-01-23T09:23:05.233+01:00</updated><title type='text'>SDI, TDI, what's in a name</title><summary type='text'>When IBM acquired the integration powertool back in 2002 it was called 'IBM Data Integrator'. Then after a bit of political squabbling, it was moved to the Tivoli brand and renamed 'Tivoli Directory Integrator'. Now, after its move to the Security brand a few years back, the name became 'Security Directory Integrator'.

I just think of it as 'Integrator', although my fingers still type 'TDI'. Old</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/6782558182424094229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=6782558182424094229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6782558182424094229'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6782558182424094229'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2020/01/sdi-tdi-whats-in-name.html' title='SDI, TDI, what&apos;s in a name'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-7071620086945134927</id><published>2019-06-17T14:37:00.005+02:00</published><updated>2019-06-17T14:37:57.137+02:00</updated><title type='text'>How To Ask Smart Questions</title><summary type='text'>Although this article is particularly about asking hackers there are some universally relevant pearls here that are ring particularly true today:

http://catb.org/~esr/faqs/smart-questions.html

It's easiest to go for the quick fix when it comes to information gathering. It's apparent in the alarming number of people who's primary news source is social media, and it's highlighted nicely in this </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/7071620086945134927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=7071620086945134927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7071620086945134927'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7071620086945134927'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2019/06/how-to-ask-smart-questions.html' title='How To Ask Smart Questions'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-7208166016065379042</id><published>2019-06-04T14:22:00.002+02:00</published><updated>2019-06-04T14:23:39.849+02:00</updated><title type='text'>SDI/TDI as a Windows Service</title><summary type='text'>NOTE: You must remember to copy the ibmdiservice.exe and ibmdiservice.props files from the &lt;InstallDir&gt;\win32_service folder to your Solution Directory (soldir) before you run the service installer.

It is a common mistake to run the service installer from the wrong folder - i.e. not your soldir. Often this is done from &lt;InstallDir&gt;\win32_service where the .exe and .props files are found.

And if</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/7208166016065379042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=7208166016065379042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7208166016065379042'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/7208166016065379042'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2019/06/sditdi-as-windows-service.html' title='SDI/TDI as a Windows Service'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3312445289204918143</id><published>2018-09-25T16:08:00.002+02:00</published><updated>2019-06-04T14:29:09.711+02:00</updated><title type='text'>Thinking about agility</title><summary type='text'>My favorite agile tool is TDI (and please forgive an old man for having trouble shifting to 'SDI'). Not only can I whip together integration service prototypes faster than anything I can do in Java (Spring), or Python or TurboPascal, but I can also build Ops features this way. Monitoring and remote control (pause, restart, failover/failback) for enabling auto-healing, or at least making the </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3312445289204918143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3312445289204918143' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3312445289204918143'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3312445289204918143'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2018/09/thinking-about-agility.html' title='Thinking about agility'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-5720246433697319762</id><published>2017-10-24T11:51:00.001+02:00</published><updated>2020-04-24T13:42:05.986+02:00</updated><title type='text'>Collecting my ramblings on Connector Loops in one place</title><summary type='text'>
November 7, 2013 - Connector Loops and why you're gonna love them

September 30, 2013 - Why Loops Instead Of Lookup Mode 

November 7, 2013 - Why Connector Loop


June 8, 2010 Loop a Connector today





</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/5720246433697319762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=5720246433697319762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5720246433697319762'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5720246433697319762'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2017/10/collecting-my-ramblings-on-connector.html' title='Collecting my ramblings on Connector Loops in one place'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-5785294537173104940</id><published>2017-09-01T01:14:00.000+02:00</published><updated>2019-03-18T09:54:48.280+01:00</updated><title type='text'>TDI Getting Started and Ensuring Basic Understanding</title><summary type='text'>
The Basics

Install TDI (https://ibm.biz/BdjsLw) locally to your laptop. This lets you customize your TDI environment easier. If you can't get a licensed version, start with the free version (https://ibm.biz/BdjiMg). It's fully functionally, will give you time needed to get started solving with TDI, and the license file can be replaced when you get yours.

Do NOT install under Program Files on </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/5785294537173104940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=5785294537173104940' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5785294537173104940'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5785294537173104940'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2017/09/tdi-for-newbies.html' title='TDI Getting Started and Ensuring Basic Understanding'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3761558625416322938</id><published>2016-12-13T14:25:00.003+01:00</published><updated>2016-12-13T14:25:49.627+01:00</updated><title type='text'>How to make the Search/Reconcile AL for an RMI Adapter against a REST or WS API</title><summary type='text'>
Writing RMI Adapter AssemblyLines can be tricky at times, especially when it comes to the Search AL - the one used for Reconcile operations. This is because the Dispatcher calls the Search AL in Cycle mode, which causes it to work differently than you might expect.

The usual behavior of an AL is that an Iterator in the Feed section delivers data - one Entry at a time - into the Data Flow </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3761558625416322938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3761558625416322938' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3761558625416322938'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3761558625416322938'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/12/how-to-make-searchreconcile-al-for-rmi.html' title='How to make the Search/Reconcile AL for an RMI Adapter against a REST or WS API'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://4.bp.blogspot.com/-elvldDRDn1o/WE_f9Sw5sYI/AAAAAAAAA6k/uaqghwmhcSYBCyUktKidOFmaHZtyMRtYQCK4B/s72-c/01_IteratorInPlace.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-4262957381442979437</id><published>2016-12-12T12:47:00.000+01:00</published><updated>2016-12-13T10:19:50.983+01:00</updated><title type='text'>Importing a client certificate in order to access an https URL</title><summary type='text'>When you go to make an HTTP request to a service that requires an SSL connection, you'll get an exception that your HTTP Client Connector cannot set up the secure link to the service. Unlike your browser, TDI (SDI) does not automatically import the client certificate. You have to do this yourself, and this post is about how to do this.

For this example, we'll try to access https://</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/4262957381442979437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=4262957381442979437' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/4262957381442979437'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/4262957381442979437'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/12/importing-client-certificate-in-order.html' title='Importing a client certificate in order to access an https URL'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://4.bp.blogspot.com/-R3R5kQOdoCE/WD1-QDp8WGI/AAAAAAAAA5w/Urg2Hn_CoqETXQlAUNGMcfKYwAE4e3nfQCK4B/s72-c/GetCertButton.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-5021132774918028010</id><published>2016-11-21T14:29:00.001+01:00</published><updated>2016-11-21T14:29:08.697+01:00</updated><title type='text'>JSON and XML Tutorial - Part 6, Making a custom Form</title><summary type='text'>As promised, this post will walk you through creating a custom Connection Tab Form for the Connector scripted in the previous post. Myself being in true form, I will begin with a promised explanation and then a bit of theory.

Internal name of a component
In my last post I promised to show you how to discover the internal name of a component. Otherwise, how can you know that the HTTP Client </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/5021132774918028010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=5021132774918028010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5021132774918028010'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/5021132774918028010'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/11/json-and-xml-tutorial-part-6-making.html' title='JSON and XML Tutorial - Part 6, Making a custom Form'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://2.bp.blogspot.com/-Cn9q0zlR2gs/WC8R1LJsHYI/AAAAAAAAA3o/5JkomuVGhawL6SB0NwTGqpP0zKQB0h0JwCK4B/s72-c/Show%2Binstalled%2Bcomponents.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-6113222385566190947</id><published>2016-11-17T15:23:00.000+01:00</published><updated>2016-11-18T15:26:58.408+01:00</updated><title type='text'>JSON and XML Tutorial - Part 5, Scripting a Connector</title><summary type='text'>Continuing from my last rambling post, we'll script an Iterator Connector that will return the same parsed entries as our Conditional Loop did. I'll begin with a little theory, which you will find duplicated other places like the How-To page of www.tdi-users.org and this venerable video tutorial on the subject.

To script a component in TDI (SDI) you start with the basic Script version of that </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/6113222385566190947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=6113222385566190947' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6113222385566190947'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6113222385566190947'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/11/json-and-xml-tutorial-part-5.html' title='JSON and XML Tutorial - Part 5, Scripting a Connector'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://3.bp.blogspot.com/-UGB9AnFA1W4/WC1-ZSVLEXI/AAAAAAAAA1E/Ej5DoGA4ivEe7ZTyGpJUqKuEpFTGDQEBQCLcB/s72-c/Add%2Bconnector.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3375508887283250941</id><published>2016-11-16T15:36:00.002+01:00</published><updated>2016-11-21T11:32:29.698+01:00</updated><title type='text'>JSON and XML Tutorial - Part 4, JSON example</title><summary type='text'>
Practice examples are helpful when mastering new techniques. In this example we'll make a REST request and then handle the return JSON payload. We'll be using the service available at the following URL:
 http://www.ideal-status.nl/static/consumer_notification_advice.json

If you dial up this URL you'll get JSON that looks like this:


{"0021":{"issuer_id":"0021","issuer_bic":"RABONL2U","</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3375508887283250941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3375508887283250941' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3375508887283250941'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3375508887283250941'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/11/json-and-xml-tutorial-part-4-json.html' title='JSON and XML Tutorial - Part 4, JSON example'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://3.bp.blogspot.com/-j7SeyoOOINE/WCxNcAhZh0I/AAAAAAAAAzE/-1nOraO9IEgqggxHlB4vSS0vEoPCHZOvACLcB/s72-c/jsonxmlTut4_AL1.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3350087066678190082</id><published>2016-11-14T15:46:00.002+01:00</published><updated>2020-04-12T13:14:06.628+02:00</updated><title type='text'>CouchDB/Cloudant Connector</title><summary type='text'>Those of you who want to learn more about the truly marvellous concept of MapReduce (thanks, Google!) or just want to play with the can't-believe-it's-free CouchDB, here is a connector I wrote a while back that supports both CouchDB and Cloudant. All you need to do is download a free copy of CouchDB (painless install and loads of fun), or sign up for your free Cloudant db in the cloud at https://</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3350087066678190082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3350087066678190082' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3350087066678190082'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3350087066678190082'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/11/couddbcloudant-connector.html' title='CouchDB/Cloudant Connector'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-1910266866649400005</id><published>2016-02-22T12:13:00.000+01:00</published><updated>2016-02-22T12:16:28.868+01:00</updated><title type='text'>JSON and XML Tutorial - Part 3, XML example</title><summary type='text'>
Continuing on from Part 1 of this tutorial, let's play a little with XML data using the HEntry techniques discussed.

Here is some example XML that we'll play with:

&lt;teams&gt;
  &lt;team name="Stark"&gt;
     &lt;sigil&gt;Direwolf&lt;/sigil&gt;
     &lt;member position="pitcher"&gt;Robb&lt;/member&gt;
     &lt;member position="crowsnest"&gt;Bran&lt;/member&gt;
  &lt;/team&gt;
  &lt;team name="Lannister"&gt;
     &lt;sigil&gt;Lion&lt;/sigil&gt;
     &lt;member </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/1910266866649400005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=1910266866649400005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/1910266866649400005'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/1910266866649400005'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/02/json-and-xml-tutorial-part-2-xml-example.html' title='JSON and XML Tutorial - Part 3, XML example'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://2.bp.blogspot.com/-bWH7pyfzbxA/USS-aIiFI1I/AAAAAAAAAMw/bWq3q5PnCX4/s72-c/hentry_1_formentry.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8599986596970781363</id><published>2016-01-13T18:43:00.000+01:00</published><updated>2016-01-13T18:43:02.805+01:00</updated><title type='text'>Externalizing an Attribute Map to a file</title><summary type='text'>Hit the More... button at the top of the AttMap - to the right of the Add and Delete buttons - and select Change inheritance. In the resulting dialog click External attribute map and select a file.


The external mapping feature of TDI uses text files that
contain one or more mapping rules. Each mapping rule looks like this: name=assignment.
Here is an example of a mapping rule:



uid=



This </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8599986596970781363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8599986596970781363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8599986596970781363'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8599986596970781363'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2016/01/externalizing-attribute-map-to-file.html' title='Externalizing an Attribute Map to a file'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3112115593206497063</id><published>2015-04-10T15:55:00.000+02:00</published><updated>2015-04-10T15:55:36.151+02:00</updated><title type='text'>What is the System Store?</title><summary type='text'>The System Store is a database that TDI uses to 'remember' stuff like:


the last change read, when you use one of the Change Detection Connectors (also called CDCs);
the snapshots of data used to compute changes when using the Delta Engine together with an Iterator Connector;
data read using the System Store Connector, which writes and reads full Entry objects with any number of Attributes;
</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3112115593206497063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3112115593206497063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3112115593206497063'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3112115593206497063'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2015/04/what-is-system-store.html' title='What is the System Store?'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-FKGdO1pG6rM/VSfPDlJ9QPI/AAAAAAAAAnQ/QaOlLO3vI5A/s72-c/what%2Bis%2Bsys%2Bstore%2B1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8298222389005409909</id><published>2015-03-02T19:52:00.002+01:00</published><updated>2015-03-02T19:52:47.590+01:00</updated><title type='text'>Importing a client certificate from an https service</title><summary type='text'>I have cobbled together a simple AL that can be run from the commandline in order to import a client certificate from an HTTPS service. For example:

ibmdisrv -c configs/tdiingOL.xml -r importcert -0 https://supportcenter.checkpoint.com

The above call results in this output (including the standard TDI is startup messages):

CTGDKD024I Remote API successfully started on port:1099, bound to:'</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8298222389005409909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8298222389005409909' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8298222389005409909'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8298222389005409909'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2015/03/importing-client-certificate-from-https.html' title='Importing a client certificate from an https service'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8216933161752830761</id><published>2015-02-11T14:21:00.004+01:00</published><updated>2015-02-11T14:21:56.323+01:00</updated><title type='text'>JSON and XML Tutorial - Part 2</title><summary type='text'>Well, this one is focused on JSON and I rolled it into a quick video.

https://www.youtube.com/watch?v=VHmf76FMI-U

Enjoy, and please comment if anything is unclear (or unsaid).</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8216933161752830761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8216933161752830761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8216933161752830761'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8216933161752830761'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2015/02/json-and-xml-tutorial-part-2.html' title='JSON and XML Tutorial - Part 2'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-8316964985020890666</id><published>2015-02-05T13:55:00.000+01:00</published><updated>2015-02-05T13:55:32.405+01:00</updated><title type='text'>Easily implementing a monitoring API to your TDI solution</title><summary type='text'>All you have to do is make AssemblyLines with the names of the operations you want to expose.



For example, I have a solution that catches incoming events over TCP  and dispatches the payload data to one or more 'event triggered' AssemblyLines. Like all server mode based ALs, this one uses multiple threads to deal with client traffic (the AL Pool), and shared log output can get a little </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/8316964985020890666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=8316964985020890666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8316964985020890666'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/8316964985020890666'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2015/02/easily-implementing-monitoring-api-to.html' title='Easily implementing a monitoring API to your TDI solution'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-6148637268368304248</id><published>2015-01-26T12:25:00.001+01:00</published><updated>2015-01-26T12:25:21.507+01:00</updated><title type='text'>Passing arguments to your AL when launching it from the command-line</title><summary type='text'>In the ibmdisrv command-line used to launch your AssemblyLine, you can use one of the user-defineable options -0 through -9 to pass information into the AL.

For example, in order to pass the name of an input file to the AssemblyLine named 'ReadFile' you could use this command-line:

  ibmdisrv -c MyConfig.xml -r ReadFile -0 c:/Input/HRExport.csv

Then in the Prolog - Before Initialize Hook of </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/6148637268368304248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=6148637268368304248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6148637268368304248'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/6148637268368304248'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2015/01/passing-arguments-to-your-al-when.html' title='Passing arguments to your AL when launching it from the command-line'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-279460766279156508</id><published>2014-11-24T13:27:00.000+01:00</published><updated>2014-11-24T13:27:04.480+01:00</updated><title type='text'>Hardening an AssemblyLine</title><summary type='text'>This is done with a little effort in three areas:

Error handling
Log handling
Auto-reconnect

For Error Handling you need to add code to the Prolog - On Error Hook for connection errors in components, and to the DataFlow - Default On Error (the catch-all Error Hook for all Connector modes). Here you will want to capture all error information to the log in order to help troubleshooting the issue.</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/279460766279156508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=279460766279156508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/279460766279156508'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/279460766279156508'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2014/11/hardening-assemblyline.html' title='Hardening an AssemblyLine'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-4476826526548863585</id><published>2014-08-04T11:49:00.004+02:00</published><updated>2014-08-04T11:49:44.738+02:00</updated><title type='text'>Null Behavior</title><summary type='text'>

I've gotten this question (again) and decided to explain it here so that Google can find it.



Null Behavior allows you to deal with missing data without having to write Javascript. The Null Behavior feature lets you define what a 'null' attribute is and how it should be handled. By default the definition of 'null' is that the source attribute is missing or has no value (null value). The </summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/4476826526548863585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=4476826526548863585' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/4476826526548863585'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/4476826526548863585'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2014/08/null-behavior.html' title='Null Behavior'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4476863800158400170.post-3618449814466369082</id><published>2014-07-12T11:25:00.000+02:00</published><updated>2014-07-12T11:25:02.932+02:00</updated><title type='text'>mapReduce Revealed!</title><summary type='text'>Here is an excellent explanation of mapReduce that I've had to share (again and again). Enjoy!

http://www.slideshare.net/okurow/couchdb-mapreduce-13321353</summary><link rel='replies' type='application/atom+xml' href='https://www.tdiingoutloud.com/feeds/3618449814466369082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4476863800158400170&amp;postID=3618449814466369082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3618449814466369082'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4476863800158400170/posts/default/3618449814466369082'/><link rel='alternate' type='text/html' href='https://www.tdiingoutloud.com/2014/07/mapreduce-revealed.html' title='mapReduce Revealed!'/><author><name>Eddie Hartman</name><uri>https://www.blogger.com/profile/12264507239868838185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry></feed>